package com.collections;

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import org.junit.Test;

public class TableDemo {

    /**
     * Table是Guava提供的一个接口 Interface Table(R,C,V)，
     * 由rowKey(行)+columnKey(列)+value组成 ，它有两个支持所有类型的键：”行”和”列”
     * 其实就是有了双键的Map
     *  例如: 学生(rowkey)--课程(columkey)--成绩(value)
     */
    @Test
    public void tableTest(){
        Table<String, String, Integer> hashBasedTable = HashBasedTable.create();
        hashBasedTable.put("一班","数学",97);
        hashBasedTable.put("二班","英语",85);
        hashBasedTable.put("二班","语文",70);
        hashBasedTable.get("一班", "数学"); //通过两个key获取value
        hashBasedTable.columnKeySet(); //获取列key  [数学, 英语, 语文]
        hashBasedTable.rowKeySet();//获取行key   [一班, 二班]
        //获取所有行的set
        hashBasedTable.cellSet().forEach(x->
                System.out.println("rowKey:"+x.getRowKey()+
                        ", columnKey:"+x.getColumnKey()+", value:"+x.getValue()));
        hashBasedTable.row("二班"); //根据rowKey获取所有对应的columnKey和value的 map
        hashBasedTable.column("数学"); //根据columnKey获取所有对应的rowKey和value 的 map
        hashBasedTable.rowMap(); //获取rowKey对应的 列-value map
        hashBasedTable.remove("一班","数学"); //移除元素
        hashBasedTable.columnMap(); //获取columnKey对应的 rowKey-value map

    }
}
